package com.hcss.common.redis.base;

import org.springframework.data.redis.core.ValueOperations;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @描述: String类型RedisTemplate Dao层接口
 * @作者: xuqian
 * @创建日期: 2018-01-12 17:03
 * @公司 浙江鸿程计算机系统有限公司
 */
public interface RedisValueDao<T> extends BaseRedisDao<T>{

    /**
     * 获取当前操作ValueOperations
     * @return
     */
    ValueOperations getValueOperations();


    /**
     * 向redis中插入数据, 有效时间为timeout，单位unit
     * @param key
     * @param value
     * @param timeout
     * @param unit
     */
    void insert(String key, T value, long timeout, TimeUnit unit);

    /**
     * 向redis中插入数据,从偏移量 offset 开始
     * @param key
     * @param value
     * @param offset
     */
    void insert(String key, T value, long offset);

    /**
     * 根据start和end截取字符串
     * @param key
     * @param start
     * @param end
     * @return
     */
    String split(String key, long start, long end);

    /**
     * 批量插入
     */
    void batchInsert(Map<String, T> values);

    /**
     * 根据key的list集合获取对应数据集合
     * @param keys
     * @return
     */
    List<T> selectByKeys(Collection<String> keys);
    
    /**
     * 根据key 获取数据
     * @param key
     * @return
     */
    T selectByKey(String key);
}
